﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Sunny.UI;

namespace NovoSerDes
{
    public partial class CusUIUintHexUpDown : UIPanel
    {
        private uint _value;

        private uint Maximum = UInt32.MaxValue;

        private uint Minimum = UInt32.MinValue;

        public CusUIUintHexUpDown()
        {
            InitializeComponent();
            this.ShowText = false;
        }

        public uint Value //
        {
            get
            {
                return _value;
            }
        }

        private void uiTextBox_HexValue_KeyPress(object sender, KeyPressEventArgs e)
        {
            // 允许输入的字符（0-9和A-F），以及退格键
            if (!char.IsControl(e.KeyChar) && !((e.KeyChar >= '0' && e.KeyChar <= '9') || (e.KeyChar >= 'A' && e.KeyChar <= 'F') || (e.KeyChar >= 'a' && e.KeyChar <= 'f')))
            {
                // 如果输入的字符不是十六进制数字，则阻止输入
                e.Handled = true;
            }
            // 获取当前文本框中的文本
            string currentText = uiTextBox_HexValue.Text;

            // 根据CheckBox状态决定限制的字符数量
            int maxCharacters = 8;

            // 如果当前文本框中已有N个及以上个字符，并且用户不是在替换选中文本，并且不是退格键，则阻止输入
            if (currentText.Length == maxCharacters && uiTextBox_HexValue.SelectionLength == 0 && e.KeyChar != '\b')
            {
                e.Handled = true;
            }
        }

        private void uiTextBox_HexValue_TextChanged(object sender, EventArgs e)
        {
            // 获取文本框中的十六进制值
            string hexValue = uiTextBox_HexValue.Text.Trim();

            // 将十六进制值转换为整数值
            if (uint.TryParse(hexValue, System.Globalization.NumberStyles.HexNumber, null, out uint uintValue))
            {
                _value = uintValue;
            }
        }

        private void uiSymbolButton_AddHex_Click(object sender, EventArgs e)
        {
            if (!string.IsNullOrEmpty(uiTextBox_HexValue.Text))
            {
                // 检查是否已达到最大值
                if (_value < Maximum)
                {
                    // 增加十六进制值
                    _value++;

                    // 更新文本框中的值为增加后的十六进制值
                    uiTextBox_HexValue.Text = _value.ToString("X");
                }
            }
        }

        private void uiSymbolButton_SubHex_Click(object sender, EventArgs e)
        {
            if (!string.IsNullOrEmpty(uiTextBox_HexValue.Text))
            {
                if (_value > Minimum)
                {
                    // 减少十六进制值
                    _value--;

                    // 更新文本框中的值为减少后的十六进制值
                    uiTextBox_HexValue.Text = _value.ToString("X");
                }
            }
        }
    }
}
